home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Cross Platform / QuickTime 4.1.2 Windows SDK / CIncludes / Dictionary.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-12  |  21.0 KB  |  729 lines  |  [TEXT/R*ch]

  1. /*
  2.      File:        Dictionary.h
  3.  
  4.      Contains:    Dictionary Manager Interfaces
  5.  
  6.      Version:    Technology:    System 7
  7.                  Release:    QuickTime 4.1
  8.  
  9.      Copyright:    (c) 1992-1999 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __DICTIONARY__
  18. #define __DICTIONARY__
  19.  
  20. #ifndef __MACTYPES__
  21.     #include <MacTypes.h>
  22. #endif
  23.  
  24. #ifndef __FILES__
  25.     #include <Files.h>
  26. #endif
  27.  
  28. #ifndef __AEREGISTRY__
  29.     #include <AERegistry.h>
  30. #endif
  31.  
  32. #ifndef __CODEFRAGMENTS__
  33.     #include <CodeFragments.h>
  34. #endif
  35.  
  36. #ifndef __MACERRORS__
  37.     #include <MacErrors.h>
  38. #endif
  39.  
  40.  
  41.  
  42.  
  43. #if PRAGMA_ONCE
  44. #pragma once
  45. #endif
  46.  
  47. #ifdef __cplusplus
  48. extern "C" {
  49. #endif
  50.  
  51. #if PRAGMA_IMPORT
  52. #pragma import on
  53. #endif
  54.  
  55. #if PRAGMA_STRUCT_ALIGN
  56.     #pragma options align=power
  57. #elif PRAGMA_STRUCT_PACKPUSH
  58.     #pragma pack(push, 2)
  59. #elif PRAGMA_STRUCT_PACK
  60.     #pragma pack(2)
  61. #endif
  62.  
  63. /*
  64. =============================================================================================
  65.  Modern Dictionary Manager
  66. =============================================================================================
  67. */
  68. /*
  69.     Dictionary information
  70. */
  71. enum {
  72.     kDictionaryFileType            = FOUR_CHAR_CODE('dict'),
  73.     kDCMDictionaryHeaderSignature = FOUR_CHAR_CODE('dict'),
  74.     kDCMDictionaryHeaderVersion    = 2
  75. };
  76.  
  77. enum {
  78.     kDCMAnyFieldTag                = typeWildCard,
  79.     kDCMAnyFieldType            = typeWildCard
  80. };
  81.  
  82. /*
  83.     Contents of a Field Info Record (an AERecord)
  84. */
  85. enum {
  86.     keyDCMFieldTag                = FOUR_CHAR_CODE('ftag'),        /* typeEnumeration */
  87.     keyDCMFieldType                = FOUR_CHAR_CODE('ftyp'),        /* typeEnumeration */
  88.     keyDCMMaxRecordSize            = FOUR_CHAR_CODE('mrsz'),        /* typeMagnitude */
  89.     keyDCMFieldAttributes        = FOUR_CHAR_CODE('fatr'),
  90.     keyDCMFieldDefaultData        = FOUR_CHAR_CODE('fdef'),
  91.     keyDCMFieldName                = FOUR_CHAR_CODE('fnam'),        /* typeChar */
  92.     keyDCMFieldFindMethods        = FOUR_CHAR_CODE('ffnd')        /* typeAEList of typeDCMFindMethod */
  93. };
  94.  
  95. /*
  96.     Special types for fields of a Field Info Record
  97. */
  98. enum {
  99.     typeDCMFieldAttributes        = FOUR_CHAR_CODE('fatr'),
  100.     typeDCMFindMethod            = FOUR_CHAR_CODE('fmth')
  101. };
  102.  
  103.  
  104. /*
  105.     Field attributes
  106. */
  107. enum {
  108.     kDCMIndexedFieldMask        = 0x00000001,
  109.     kDCMRequiredFieldMask        = 0x00000002,
  110.     kDCMIdentifyFieldMask        = 0x00000004,
  111.     kDCMFixedSizeFieldMask        = 0x00000008,
  112.     kDCMHiddenFieldMask            = (long)0x80000000
  113. };
  114.  
  115. typedef OptionBits                         DCMFieldAttributes;
  116. /*
  117.     Standard dictionary properties
  118. */
  119. enum {
  120.     pDCMAccessMethod            = FOUR_CHAR_CODE('amtd'),        /* data type: typeChar ReadOnly */
  121.     pDCMPermission                = FOUR_CHAR_CODE('perm'),        /* data type: typeUInt16 */
  122.     pDCMListing                    = FOUR_CHAR_CODE('list'),        /* data type: typeUInt16 */
  123.     pDCMMaintenance                = FOUR_CHAR_CODE('mtnc'),        /* data type: typeUInt16 */
  124.     pDCMLocale                    = FOUR_CHAR_CODE('locl'),        /* data type: typeUInt32.  Optional; default = kLocaleIdentifierWildCard */
  125.     pDCMClass                    = pClass,                        /* data type: typeUInt16 */
  126.     pDCMCopyright                = FOUR_CHAR_CODE('info')        /* data type: typeChar */
  127. };
  128.  
  129. /*
  130.     pDCMPermission property constants
  131. */
  132. enum {
  133.     kDCMReadOnlyDictionary        = 0,
  134.     kDCMReadWriteDictionary        = 1
  135. };
  136.  
  137. /*
  138.     pDCMListing property constants
  139. */
  140. enum {
  141.     kDCMAllowListing            = 0,
  142.     kDCMProhibitListing            = 1
  143. };
  144.  
  145. /*
  146.     pDCMClass property constants
  147. */
  148. enum {
  149.     kDCMUserDictionaryClass        = 0,
  150.     kDCMSpecificDictionaryClass    = 1,
  151.     kDCMBasicDictionaryClass    = 2
  152. };
  153.  
  154. /*
  155.     Standard search method
  156. */
  157. enum {
  158.     kDCMFindMethodExactMatch    = kAEEquals,
  159.     kDCMFindMethodBeginningMatch = kAEBeginsWith,
  160.     kDCMFindMethodContainsMatch    = kAEContains,
  161.     kDCMFindMethodEndingMatch    = kAEEndsWith,
  162.     kDCMFindMethodForwardTrie    = FOUR_CHAR_CODE('ftri'),        /* used for morphological analysis*/
  163.     kDCMFindMethodBackwardTrie    = FOUR_CHAR_CODE('btri')        /* used for morphological analysis*/
  164. };
  165.  
  166. typedef OSType                             DCMFindMethod;
  167. /*
  168.     AccessMethod features
  169. */
  170. enum {
  171.     kDCMCanUseFileDictionaryMask = 0x00000001,
  172.     kDCMCanUseMemoryDictionaryMask = 0x00000002,
  173.     kDCMCanStreamDictionaryMask    = 0x00000004,
  174.     kDCMCanHaveMultipleIndexMask = 0x00000008,
  175.     kDCMCanModifyDictionaryMask    = 0x00000010,
  176.     kDCMCanCreateDictionaryMask    = 0x00000020,
  177.     kDCMCanAddDictionaryFieldMask = 0x00000040,
  178.     kDCMCanUseTransactionMask    = 0x00000080
  179. };
  180.  
  181. typedef OptionBits                         DCMAccessMethodFeature;
  182. typedef UInt32                             DCMUniqueID;
  183. typedef struct OpaqueDCMObjectID*         DCMObjectID;
  184. typedef DCMObjectID                     DCMAccessMethodID;
  185. typedef DCMObjectID                     DCMDictionaryID;
  186. #define kDCMInvalidObjectID ((DCMObjectID) kInvalidID)
  187. typedef struct OpaqueDCMObjectRef*         DCMObjectRef;
  188. typedef DCMObjectRef                     DCMDictionaryRef;
  189. typedef DCMObjectRef                     DCMDictionaryStreamRef;
  190. #define kDCMInvalidObjectRef ((DCMObjectRef) kInvalidID)
  191. typedef struct OpaqueDCMObjectIterator*  DCMObjectIterator;
  192. typedef DCMObjectIterator                 DCMAccessMethodIterator;
  193. typedef DCMObjectIterator                 DCMDictionaryIterator;
  194. typedef struct OpaqueDCMFoundRecordIterator*  DCMFoundRecordIterator;
  195. /*
  196.     Field specification declarations
  197. */
  198. typedef DescType                         DCMFieldTag;
  199. typedef DescType                         DCMFieldType;
  200. /*
  201.     Dictionary header information
  202. */
  203.  
  204. struct DCMDictionaryHeader {
  205.     FourCharCode                     headerSignature;
  206.     UInt32                             headerVersion;
  207.     ByteCount                         headerSize;
  208.     Str63                             accessMethod;
  209. };
  210. typedef struct DCMDictionaryHeader        DCMDictionaryHeader;
  211. /*
  212.     Callback routines
  213. */
  214. typedef CALLBACK_API( Boolean , DCMProgressFilterProcPtr )(Boolean determinateProcess, UInt16 percentageComplete, UInt32 callbackUD);
  215. typedef STACK_UPP_TYPE(DCMProgressFilterProcPtr)                 DCMProgressFilterUPP;
  216. #if OPAQUE_UPP_TYPES
  217.     EXTERN_API(DCMProgressFilterUPP)
  218.     NewDCMProgressFilterUPP           (DCMProgressFilterProcPtr userRoutine);
  219.  
  220.     EXTERN_API(void)
  221.     DisposeDCMProgressFilterUPP       (DCMProgressFilterUPP    userUPP);
  222.  
  223.     EXTERN_API(Boolean)
  224.     InvokeDCMProgressFilterUPP       (Boolean                    determinateProcess,
  225.                                     UInt16                    percentageComplete,
  226.                                     UInt32                    callbackUD,
  227.                                     DCMProgressFilterUPP    userUPP);
  228.  
  229. #else
  230.     enum { uppDCMProgressFilterProcInfo = 0x00000E50 };             /* pascal 1_byte Func(1_byte, 2_bytes, 4_bytes) */
  231.     #define NewDCMProgressFilterUPP(userRoutine)                     (DCMProgressFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppDCMProgressFilterProcInfo, GetCurrentArchitecture())
  232.     #define DisposeDCMProgressFilterUPP(userUPP)                     DisposeRoutineDescriptor(userUPP)
  233.     #define InvokeDCMProgressFilterUPP(determinateProcess, percentageComplete, callbackUD, userUPP)  (Boolean)CALL_THREE_PARAMETER_UPP((userUPP), uppDCMProgressFilterProcInfo, (determinateProcess), (percentageComplete), (callbackUD))
  234. #endif
  235. /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  236. #define NewDCMProgressFilterProc(userRoutine)                     NewDCMProgressFilterUPP(userRoutine)
  237. #define CallDCMProgressFilterProc(userRoutine, determinateProcess, percentageComplete, callbackUD) InvokeDCMProgressFilterUPP(determinateProcess, percentageComplete, callbackUD, userRoutine)
  238. /*
  239.     Library version
  240. */
  241. EXTERN_API( UInt32 )
  242. DCMLibraryVersion                (void);
  243.  
  244. /*
  245.     Create/delete dictionary
  246. */
  247. EXTERN_API( OSStatus )
  248. DCMNewDictionary                (DCMAccessMethodID         accessMethodID,
  249.                                  const FSSpec *            newDictionaryFile,
  250.                                  ScriptCode             scriptTag,
  251.                                  const AEDesc *            listOfFieldInfoRecords,
  252.                                  Boolean                 invisible,
  253.                                  ItemCount                 recordCapacity,
  254.                                  DCMDictionaryID *        newDictionary);
  255.  
  256. EXTERN_API( OSStatus )
  257. DCMDeriveNewDictionary            (DCMDictionaryID         srcDictionary,
  258.                                  const FSSpec *            newDictionaryFile,
  259.                                  ScriptCode             scriptTag,
  260.                                  Boolean                 invisible,
  261.                                  ItemCount                 recordCapacity,
  262.                                  DCMDictionaryID *        newDictionary);
  263.  
  264. EXTERN_API( OSStatus )
  265. DCMDeleteDictionary                (DCMDictionaryID         dictionaryID);
  266.  
  267. /*
  268.     Register dictionary
  269. */
  270. EXTERN_API( OSStatus )
  271. DCMRegisterDictionaryFile        (const FSSpec *            dictionaryFile,
  272.                                  DCMDictionaryID *        dictionaryID);
  273.  
  274. EXTERN_API( OSStatus )
  275. DCMUnregisterDictionary            (DCMDictionaryID         dictionaryID);
  276.  
  277. /*
  278.     Open dictionary
  279. */
  280. EXTERN_API( OSStatus )
  281. DCMOpenDictionary                (DCMDictionaryID         dictionaryID,
  282.                                  ByteCount                 protectKeySize,
  283.                                  ConstLogicalAddress     protectKey,
  284.                                  DCMDictionaryRef *        dictionaryRef);
  285.  
  286. EXTERN_API( OSStatus )
  287. DCMCloseDictionary                (DCMDictionaryRef         dictionaryRef);
  288.  
  289. /*
  290.     Change access privilege
  291. */
  292. EXTERN_API( OSStatus )
  293. DCMGetDictionaryWriteAccess        (DCMDictionaryRef         dictionaryRef,
  294.                                  Duration                 timeOutDuration);
  295.  
  296. EXTERN_API( OSStatus )
  297. DCMReleaseDictionaryWriteAccess    (DCMDictionaryRef         dictionaryRef,
  298.                                  Boolean                 commitTransaction);
  299.  
  300. /*
  301.     Find records
  302. */
  303. EXTERN_API( OSStatus )
  304. DCMFindRecords                    (DCMDictionaryRef         dictionaryRef,
  305.                                  DCMFieldTag             keyFieldTag,
  306.                                  ByteCount                 keySize,
  307.                                  ConstLogicalAddress     keyData,
  308.                                  DCMFindMethod             findMethod,
  309.                                  ItemCount                 preFetchedDataNum,
  310.                                  DCMFieldTag             preFetchedData[],
  311.                                  ItemCount                 skipCount,
  312.                                  ItemCount                 maxRecordCount,
  313.                                  DCMFoundRecordIterator * recordIterator);
  314.  
  315. EXTERN_API( ItemCount )
  316. DCMCountRecordIterator            (DCMFoundRecordIterator  recordIterator);
  317.  
  318. EXTERN_API( OSStatus )
  319. DCMIterateFoundRecord            (DCMFoundRecordIterator  recordIterator,
  320.                                  ByteCount                 maxKeySize,
  321.                                  ByteCount *            actualKeySize,
  322.                                  LogicalAddress         keyData,
  323.                                  DCMUniqueID *            uniqueID,
  324.                                  AEDesc *                dataList);
  325.  
  326. EXTERN_API( OSStatus )
  327. DCMDisposeRecordIterator        (DCMFoundRecordIterator  recordIterator);
  328.  
  329. /*
  330.     Dump dictionary
  331. */
  332. EXTERN_API( OSStatus )
  333. DCMCountRecord                    (DCMDictionaryID         dictionaryID,
  334.                                  ItemCount *            count);
  335.  
  336. EXTERN_API( OSStatus )
  337. DCMGetRecordSequenceNumber        (DCMDictionaryRef         dictionaryRef,
  338.                                  DCMFieldTag             keyFieldTag,
  339.                                  ByteCount                 keySize,
  340.                                  ConstLogicalAddress     keyData,
  341.                                  DCMUniqueID             uniqueID,
  342.                                  ItemCount *            sequenceNum);
  343.  
  344. EXTERN_API( OSStatus )
  345. DCMGetNthRecord                    (DCMDictionaryRef         dictionaryRef,
  346.                                  DCMFieldTag             keyFieldTag,
  347.                                  ItemCount                 serialNum,
  348.                                  ByteCount                 maxKeySize,
  349.                                  ByteCount *            keySize,
  350.                                  LogicalAddress         keyData,
  351.                                  DCMUniqueID *            uniqueID);
  352.  
  353. EXTERN_API( OSStatus )
  354. DCMGetNextRecord                (DCMDictionaryRef         dictionaryRef,
  355.                                  DCMFieldTag             keyFieldTag,
  356.                                  ByteCount                 keySize,
  357.                                  ConstLogicalAddress     keyData,
  358.                                  DCMUniqueID             uniqueID,
  359.                                  ByteCount                 maxKeySize,
  360.                                  ByteCount *            nextKeySize,
  361.                                  LogicalAddress         nextKeyData,
  362.                                  DCMUniqueID *            nextUniqueID);
  363.  
  364. EXTERN_API( OSStatus )
  365. DCMGetPrevRecord                (DCMDictionaryRef         dictionaryRef,
  366.                                  DCMFieldTag             keyFieldTag,
  367.                                  ByteCount                 keySize,
  368.                                  ConstLogicalAddress     keyData,
  369.                                  DCMUniqueID             uniqueID,
  370.                                  ByteCount                 maxKeySize,
  371.                                  ByteCount *            prevKeySize,
  372.                                  LogicalAddress         prevKeyData,
  373.                                  DCMUniqueID *            prevUniqueID);
  374.  
  375. /*
  376.     Get field data
  377. */
  378. EXTERN_API( OSStatus )
  379. DCMGetFieldData                    (DCMDictionaryRef         dictionaryRef,
  380.                                  DCMFieldTag             keyFieldTag,
  381.                                  ByteCount                 keySize,
  382.                                  ConstLogicalAddress     keyData,
  383.                                  DCMUniqueID             uniqueID,
  384.                                  ItemCount                 numOfData,
  385.                                  const DCMFieldTag         dataTag[],
  386.                                  AEDesc *                dataList);
  387.  
  388. EXTERN_API( OSStatus )
  389. DCMSetFieldData                    (DCMDictionaryRef         dictionaryRef,
  390.                                  DCMFieldTag             keyFieldTag,
  391.                                  ByteCount                 keySize,
  392.                                  ConstLogicalAddress     keyData,
  393.                                  DCMUniqueID             uniqueID,
  394.                                  const AEDesc *            dataList);
  395.  
  396. /*
  397.     Add record
  398. */
  399. EXTERN_API( OSStatus )
  400. DCMAddRecord                    (DCMDictionaryRef         dictionaryRef,
  401.                                  DCMFieldTag             keyFieldTag,
  402.                                  ByteCount                 keySize,
  403.                                  ConstLogicalAddress     keyData,
  404.                                  Boolean                 checkOnly,
  405.                                  const AEDesc *            dataList,
  406.                                  DCMUniqueID *            newUniqueID);
  407.  
  408. EXTERN_API( OSStatus )
  409. DCMDeleteRecord                    (DCMDictionaryRef         dictionaryRef,
  410.                                  DCMFieldTag             keyFieldTag,
  411.                                  ByteCount                 keySize,
  412.                                  ConstLogicalAddress     keyData,
  413.                                  DCMUniqueID             uniqueID);
  414.  
  415. /*
  416.     Reorganize/compact dictionary
  417. */
  418. EXTERN_API( OSStatus )
  419. DCMReorganizeDictionary            (DCMDictionaryID         dictionaryID,
  420.                                  ItemCount                 extraCapacity,
  421.                                  DCMProgressFilterUPP     progressProc,
  422.                                  UInt32                 userData);
  423.  
  424. EXTERN_API( OSStatus )
  425. DCMCompactDictionary            (DCMDictionaryID         dictionaryID,
  426.                                  DCMProgressFilterUPP     progressProc,
  427.                                  UInt32                 userData);
  428.  
  429. /*
  430.     DictionaryID utilities
  431. */
  432. EXTERN_API( OSStatus )
  433. DCMGetFileFromDictionaryID        (DCMDictionaryID         dictionaryID,
  434.                                  FSSpec *                fileRef);
  435.  
  436. EXTERN_API( OSStatus )
  437. DCMGetDictionaryIDFromFile        (const FSSpec *            fileRef,
  438.                                  DCMDictionaryID *        dictionaryID);
  439.  
  440. EXTERN_API( DCMDictionaryID )
  441. DCMGetDictionaryIDFromRef        (DCMDictionaryRef         dictionaryRef);
  442.  
  443. /*
  444.     Field information and manipulation
  445. */
  446. EXTERN_API( OSStatus )
  447. DCMGetDictionaryFieldInfo        (DCMDictionaryID         dictionaryID,
  448.                                  DCMFieldTag             fieldTag,
  449.                                  AEDesc *                fieldInfoRecord);
  450.  
  451. /*
  452.     Dictionary property
  453. */
  454. EXTERN_API( OSStatus )
  455. DCMGetDictionaryProperty        (DCMDictionaryID         dictionaryID,
  456.                                  DCMFieldTag             propertyTag,
  457.                                  ByteCount                 maxPropertySize,
  458.                                  ByteCount *            actualSize,
  459.                                  LogicalAddress         propertyValue);
  460.  
  461. EXTERN_API( OSStatus )
  462. DCMSetDictionaryProperty        (DCMDictionaryID         dictionaryID,
  463.                                  DCMFieldTag             propertyTag,
  464.                                  ByteCount                 propertySize,
  465.                                  ConstLogicalAddress     propertyValue);
  466.  
  467. EXTERN_API( OSStatus )
  468. DCMGetDictionaryPropertyList    (DCMDictionaryID         dictionaryID,
  469.                                  ItemCount                 maxPropertyNum,
  470.                                  ItemCount *            numProperties,
  471.                                  DCMFieldTag             propertyTag[]);
  472.  
  473. /*
  474.     Seaarch dictionary
  475. */
  476. EXTERN_API( OSStatus )
  477. DCMCreateDictionaryIterator        (DCMDictionaryIterator * dictionaryIterator);
  478.  
  479. /*
  480.     Search AccessMethod
  481. */
  482. EXTERN_API( OSStatus )
  483. DCMCreateAccessMethodIterator    (DCMAccessMethodIterator * accessMethodIterator);
  484.  
  485. /*
  486.     Iterator Operation
  487. */
  488. EXTERN_API( ItemCount )
  489. DCMCountObjectIterator            (DCMObjectIterator         iterator);
  490.  
  491. EXTERN_API( OSStatus )
  492. DCMIterateObject                (DCMObjectIterator         iterator,
  493.                                  DCMObjectID *            objectID);
  494.  
  495. EXTERN_API( OSStatus )
  496. DCMResetObjectIterator            (DCMObjectIterator         iterator);
  497.  
  498. EXTERN_API( OSStatus )
  499. DCMDisposeObjectIterator        (DCMObjectIterator         iterator);
  500.  
  501. /*
  502.     Get AccessMethod information
  503. */
  504. EXTERN_API( OSStatus )
  505. DCMGetAccessMethodIDFromName    (ConstStr63Param         accessMethodName,
  506.                                  DCMAccessMethodID *    accessMethodID);
  507.  
  508. /*
  509.     Field Info Record routines
  510. */
  511. EXTERN_API( OSStatus )
  512. DCMCreateFieldInfoRecord        (DescType                 fieldTag,
  513.                                  DescType                 fieldType,
  514.                                  ByteCount                 maxRecordSize,
  515.                                  DCMFieldAttributes     fieldAttributes,
  516.                                  AEDesc *                fieldDefaultData,
  517.                                  ItemCount                 numberOfFindMethods,
  518.                                  DCMFindMethod             findMethods[],
  519.                                  AEDesc *                fieldInfoRecord);
  520.  
  521. EXTERN_API( OSStatus )
  522. DCMGetFieldTagAndType            (const AEDesc *            fieldInfoRecord,
  523.                                  DCMFieldTag *            fieldTag,
  524.                                  DCMFieldType *            fieldType);
  525.  
  526. EXTERN_API( OSStatus )
  527. DCMGetFieldMaxRecordSize        (const AEDesc *            fieldInfoRecord,
  528.                                  ByteCount *            maxRecordSize);
  529.  
  530. EXTERN_API( OSStatus )
  531. DCMGetFieldAttributes            (const AEDesc *            fieldInfoRecord,
  532.                                  DCMFieldAttributes *    attributes);
  533.  
  534. EXTERN_API( OSStatus )
  535. DCMGetFieldDefaultData            (const AEDesc *            fieldInfoRecord,
  536.                                  DescType                 desiredType,
  537.                                  AEDesc *                fieldDefaultData);
  538.  
  539. EXTERN_API( OSStatus )
  540. DCMGetFieldFindMethods            (const AEDesc *            fieldInfoRecord,
  541.                                  ItemCount                 findMethodsArrayMaxSize,
  542.                                  DCMFindMethod             findMethods[],
  543.                                  ItemCount *            actualNumberOfFindMethods);
  544.  
  545. /*
  546.     Check Dictionary Manager availability
  547. */
  548. #if TARGET_RT_MAC_CFM
  549. #ifdef __cplusplus
  550.     inline pascal Boolean DCMDictionaryManagerAvailable() { return (DCMLibraryVersion != (void*)kUnresolvedCFragSymbolAddress); }
  551. #else
  552.     #define DCMDictionaryManagerAvailable()     ((DCMLibraryVersion != (void*)kUnresolvedCFragSymbolAddress)
  553. #endif
  554. #elif TARGET_RT_MAC_MACHO
  555. /* Dictionary Manager is always available on OS X */
  556. #ifdef __cplusplus
  557.     inline pascal Boolean DCMDictionaryManagerAvailable() { return true; }
  558. #else
  559.     #define DCMDictionaryManagerAvailable()     (true)
  560. #endif
  561. #endif  /*  */
  562.  
  563. /*
  564. =============================================================================================
  565.     Definitions for Japanese Analysis Module
  566. =============================================================================================
  567. */
  568. /*
  569.     Default dictionary access method for Japanese analysis
  570. */
  571. #define kAppleJapaneseDefaultAccessMethodName    "\pDAM:Apple Backward Trie Access Method"
  572. /*
  573.     Data length limitations of Apple Japanese dictionaries
  574. */
  575. enum {
  576.     kMaxYomiLengthInAppleJapaneseDictionary = 40,
  577.     kMaxKanjiLengthInAppleJapaneseDictionary = 64
  578. };
  579.  
  580. /*
  581.     Defined field tags of Apple Japanese dictionary
  582. */
  583. enum {
  584.     kDCMJapaneseYomiTag            = FOUR_CHAR_CODE('yomi'),
  585.     kDCMJapaneseHyokiTag        = FOUR_CHAR_CODE('hyok'),
  586.     kDCMJapaneseHinshiTag        = FOUR_CHAR_CODE('hins'),
  587.     kDCMJapaneseWeightTag        = FOUR_CHAR_CODE('hind'),
  588.     kDCMJapanesePhoneticTag        = FOUR_CHAR_CODE('hton'),
  589.     kDCMJapaneseAccentTag        = FOUR_CHAR_CODE('acnt'),
  590.     kDCMJapaneseOnKunReadingTag    = FOUR_CHAR_CODE('OnKn'),
  591.     kDCMJapaneseFukugouInfoTag    = FOUR_CHAR_CODE('fuku')
  592. };
  593.  
  594. enum {
  595.     kDCMJapaneseYomiType        = typeUnicodeText,
  596.     kDCMJapaneseHyokiType        = typeUnicodeText,
  597.     kDCMJapaneseHinshiType        = FOUR_CHAR_CODE('hins'),
  598.     kDCMJapaneseWeightType        = typeShortInteger,
  599.     kDCMJapanesePhoneticType    = typeUnicodeText,
  600.     kDCMJapaneseAccentType        = FOUR_CHAR_CODE('byte'),
  601.     kDCMJapaneseOnKunReadingType = typeUnicodeText,
  602.     kDCMJapaneseFukugouInfoType    = FOUR_CHAR_CODE('fuku')
  603. };
  604.  
  605.  
  606. /*
  607. =============================================================================================
  608.  System 7 Dictionary Manager
  609. =============================================================================================
  610. */
  611.  
  612. #if PRAGMA_STRUCT_ALIGN
  613. #pragma options align=reset
  614. #pragma options align=mac68k
  615. #endif
  616.  
  617. enum {
  618.                                                                 /* Dictionary data insertion modes */
  619.     kInsert                        = 0,                            /* Only insert the input entry if there is nothing in the dictionary that matches the key. */
  620.     kReplace                    = 1,                            /* Only replace the entries which match the key with the input entry. */
  621.     kInsertOrReplace            = 2                                /* Insert the entry if there is nothing in the dictionary which matches the key, otherwise replaces the existing matched entries with the input entry. */
  622. };
  623.  
  624. /* This Was InsertMode */
  625.  
  626. typedef short                             DictionaryDataInsertMode;
  627. enum {
  628.                                                                 /* Key attribute constants */
  629.     kIsCaseSensitive            = 0x10,                            /* case sensitive = 16        */
  630.     kIsNotDiacriticalSensitive    = 0x20                            /* diac not sensitive = 32    */
  631. };
  632.  
  633. enum {
  634.                                                                 /* Registered attribute type constants.    */
  635.     kNoun                        = -1,
  636.     kVerb                        = -2,
  637.     kAdjective                    = -3,
  638.     kAdverb                        = -4
  639. };
  640.  
  641. /* This Was AttributeType */
  642. typedef SInt8                             DictionaryEntryAttribute;
  643. /* Dictionary information record */
  644.  
  645. struct DictionaryInformation {
  646.     FSSpec                             dictionaryFSSpec;
  647.     SInt32                             numberOfRecords;
  648.     SInt32                             currentGarbageSize;
  649.     ScriptCode                         script;
  650.     SInt16                             maximumKeyLength;
  651.     SInt8                             keyAttributes;
  652. };
  653. typedef struct DictionaryInformation    DictionaryInformation;
  654.  
  655. struct DictionaryAttributeTable {
  656.     UInt8                             datSize;
  657.     DictionaryEntryAttribute         datTable[1];
  658. };
  659. typedef struct DictionaryAttributeTable    DictionaryAttributeTable;
  660. typedef DictionaryAttributeTable *        DictionaryAttributeTablePtr;
  661. EXTERN_API( OSErr )
  662. InitializeDictionary            (const FSSpec *            theFsspecPtr,
  663.                                  SInt16                 maximumKeyLength,
  664.                                  SInt8                     keyAttributes,
  665.                                  ScriptCode             script)                                THREEWORDINLINE(0x303C, 0x0500, 0xAA53);
  666.  
  667. EXTERN_API( OSErr )
  668. OpenDictionary                    (const FSSpec *            theFsspecPtr,
  669.                                  SInt8                     accessPermission,
  670.                                  SInt32 *                dictionaryReference)                THREEWORDINLINE(0x303C, 0x0501, 0xAA53);
  671.  
  672. EXTERN_API( OSErr )
  673. CloseDictionary                    (SInt32                 dictionaryReference)                THREEWORDINLINE(0x303C, 0x0202, 0xAA53);
  674.  
  675. EXTERN_API( OSErr )
  676. InsertRecordToDictionary        (SInt32                 dictionaryReference,
  677.                                  ConstStr255Param         key,
  678.                                  Handle                 recordDataHandle,
  679.                                  DictionaryDataInsertMode  whichMode)                        THREEWORDINLINE(0x303C, 0x0703, 0xAA53);
  680.  
  681. EXTERN_API( OSErr )
  682. DeleteRecordFromDictionary        (SInt32                 dictionaryReference,
  683.                                  ConstStr255Param         key)                                THREEWORDINLINE(0x303C, 0x0404, 0xAA53);
  684.  
  685. EXTERN_API( OSErr )
  686. FindRecordInDictionary            (SInt32                 dictionaryReference,
  687.                                  ConstStr255Param         key,
  688.                                  DictionaryAttributeTablePtr  requestedAttributeTablePointer,
  689.                                  Handle                 recordDataHandle)                    THREEWORDINLINE(0x303C, 0x0805, 0xAA53);
  690.  
  691. EXTERN_API( OSErr )
  692. FindRecordByIndexInDictionary    (SInt32                 dictionaryReference,
  693.                                  SInt32                 recordIndex,
  694.                                  DictionaryAttributeTablePtr  requestedAttributeTablePointer,
  695.                                  Str255                 recordKey,
  696.                                  Handle                 recordDataHandle)                    THREEWORDINLINE(0x303C, 0x0A06, 0xAA53);
  697.  
  698. EXTERN_API( OSErr )
  699. GetDictionaryInformation        (SInt32                 dictionaryReference,
  700.                                  DictionaryInformation * theDictionaryInformation)            THREEWORDINLINE(0x303C, 0x0407, 0xAA53);
  701.  
  702. EXTERN_API( OSErr )
  703. CompactDictionary                (SInt32                 dictionaryReference)                THREEWORDINLINE(0x303C, 0x0208, 0xAA53);
  704.  
  705.  
  706.  
  707.  
  708.  
  709. #if PRAGMA_STRUCT_ALIGN
  710.     #pragma options align=reset
  711. #elif PRAGMA_STRUCT_PACKPUSH
  712.     #pragma pack(pop)
  713. #elif PRAGMA_STRUCT_PACK
  714.     #pragma pack()
  715. #endif
  716.  
  717. #ifdef PRAGMA_IMPORT_OFF
  718. #pragma import off
  719. #elif PRAGMA_IMPORT
  720. #pragma import reset
  721. #endif
  722.  
  723. #ifdef __cplusplus
  724. }
  725. #endif
  726.  
  727. #endif /* __DICTIONARY__ */
  728.  
  729.